// 体重测试数据生成页面
const app = getApp()
const api = require('../../utils/api')
const util = require('../../utils/util.js')

Page({
  data: {
    generating: false,
    count: 30,
    progress: 0,
    logs: [],
    baseWeight: 65, // 基准体重，用户可以修改
    fluctuation: 5   // 体重波动范围（kg）
  },

  onLoad() {
    // 获取用户信息中的目标体重作为基准
    if (app.globalData.userInfo && app.globalData.userInfo.targetWeight) {
      this.setData({
        baseWeight: app.globalData.userInfo.targetWeight
      });
    }
  },

  // 生成随机体重值的函数
  generateRandomWeight() {
    const { baseWeight, fluctuation } = this.data;
    
    // 基准体重附近的随机值
    const randomWeight = (Math.random() * fluctuation * 2 - fluctuation) + baseWeight;
    
    // 确保体重不低于30kg
    return Math.max(30, parseFloat(randomWeight.toFixed(1)));
  },

  // 生成过去30天的随机时间点
  generateRandomTimestamps(count) {
    const timestamps = [];
    const now = new Date();
    
    for (let i = 0; i < count; i++) {
      // 在过去30天内随机选择一个日期
      const daysAgo = Math.floor(Math.random() * 30);
      const date = new Date(now);
      date.setDate(now.getDate() - daysAgo);
      
      // 设置随机时间
      date.setHours(Math.floor(Math.random() * 24));
      date.setMinutes(Math.floor(Math.random() * 60));
      date.setSeconds(0);
      date.setMilliseconds(0);
      
      timestamps.push(date.toISOString());
    }
    
    // 按时间排序
    return timestamps.sort();
  },

  // 生成体重测试数据的方法
  async generateTestData() {
    if (this.data.generating) {
      return;
    }

    this.setData({
      generating: true,
      progress: 0,
      logs: ['开始生成测试数据...']
    });

    const count = this.data.count;
    const timestamps = this.generateRandomTimestamps(count);
    
    for (let i = 0; i < count; i++) {
      const value = this.generateRandomWeight();
      const measuredAt = timestamps[i];
      
      const log = `添加记录 #${i+1}: ${value} kg，时间: ${new Date(measuredAt).toLocaleString()}`;
      this.appendLog(log);
      
      try {
        // 创建记录数据对象
        const recordData = {
          value,
          measuredAt,
          note: '测试数据'
        };
        
        // 正确调用API - 第一个参数是类型，第二个参数是数据对象
        await api.health.addRecord('weight', recordData);
        
        this.setData({
          progress: Math.floor(((i + 1) / count) * 100)
        });
        
        // 添加一个小延迟，避免请求过快
        await new Promise(resolve => setTimeout(resolve, 300));
        
      } catch (error) {
        const errorLog = `添加记录 #${i+1} 失败: ${error.message || error}`;
        this.appendLog(errorLog);
        console.error(errorLog, error);
      }
    }
    
    this.appendLog('测试数据添加完成！');
    this.setData({ generating: false });
    
    // 完成后刷新当前页面，以便立即看到折线图变化
    wx.showToast({
      title: '数据已添加',
      icon: 'success',
      duration: 2000,
      complete: () => {
        setTimeout(() => {
          // 返回上一页，以便重新加载数据
          wx.navigateBack();
        }, 2000);
      }
    });
  },
  
  // 添加日志
  appendLog(log) {
    this.setData({
      logs: [...this.data.logs, log]
    });
  },
  
  // 取消生成
  cancelGeneration() {
    this.setData({ generating: false });
    this.appendLog('已取消生成');
  },
  
  // 修改生成数量
  changeCount(e) {
    this.setData({
      count: parseInt(e.detail.value, 10) || 30
    });
  },
  
  // 修改基准体重
  changeBaseWeight(e) {
    this.setData({
      baseWeight: parseFloat(e.detail.value) || 65
    });
  },
  
  // 修改波动范围
  changeFluctuation(e) {
    this.setData({
      fluctuation: parseFloat(e.detail.value) || 5
    });
  }
}); 